//计数器
var interval = null;

//值越大旋转时间越长  即旋转速度
var intime = 100;

Page({

  /**
   * 页面的初始数据
   */
  data: {
    list: [], // 手指信息数组
    Class: '', // 置空非选中颜色
    color: [], // 循环数组对象
    num: 0, // 初始化选中位置
    countdown: null, // 游戏开始倒计时
    isJoin: true, // 游戏是否可加入
    isTiming: true, // 倒计时状态
    isRemove: true, // 是否清空数据
    isAgainStart: false, // 是否显示重新开始按钮
    time: 3, // 倒计时 时间
    prompt: '放好手指准备',
    warning: '温馨提示：不同设备的触摸数量上限有所不同',
    touchMusic: 'https://h5.bjue.cn/h5/mp3/m1.mp3',
    countdownMusic: 'https://h5.bjue.cn/h5/mp3/m2.mp3',
    selectMusic: 'https://h5.bjue.cn/h5/mp3/ty.mp3'
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    this.Music = wx.getBackgroundAudioManager()
  },

  touchstartFn(e) { // 手指触碰屏幕
    if (!this.data.isJoin) {  // 判断是否可加入成员
      return false
    } else {
      this.Music.stop()
      this.playTouchMusic() // 点击音效
      let list = e.touches
      this.setData({ list: this._addIndex(list) })
      wx.vibrateShort() // 循环使发生较短的震动
      this.onReset() //有新成员加入
      if (list.length >= 2 && this.data.isTiming) { // 判断必须有两个成员 并且 当前倒计时开启状态
        this.countdownFn() // 开始倒计时
      }
    }
  },

  countdownFn() { // 开始倒计时 3 秒后 开始 
    this.setData({
      isTiming: false, // 倒计时中 。。。 禁止在触发倒计时事件
      prompt: ''
    })
    this.setData({
      time: this.data.time,
      prompt: `倒计时 ${this.data.time} 秒`
    })
    this.countdown = setInterval(() => {
      this.data.time--
      this.setData({
        time: this.data.time,
        prompt: `倒计时 ${this.data.time} 秒`
      })
      if (this.data.time <= 0) { // 到计时为 0 时， 开始游戏 =======
        clearInterval(this.countdown) // 清除倒计时
        this.setData({
          prompt: '开始',
          isJoin: false, // 禁止加入游戏
          isRemove: false, // 禁止清除手指数据
          isTiming: true // 重置倒计时状态
        })
        this.onStart() // 开始游戏方法 ==========
      }
    }, 1000)
    setTimeout(()=>{
      this.playCountdownMusic() // 倒计时音效
    },500) 
  },

  touchmoveFn(e) { // 监听手指滑动屏幕
    if (!this.data.isJoin) {
      return false
    } else {
      let list = e.touches
      setTimeout(() => { this.setData({ list: this._addIndex(list) }) }, 30)
    }
  },

  touchendFn(e) { // 监听手指离开屏幕
    this.Music.stop() 
    let list = e.touches
    if (this.data.isRemove) { // 当未开始时， 重置游戏
      setTimeout(() => { 
        this.Music.stop() 
        this.setData({ list: this._addIndex(list) }) 
      }, 30)
      this.onReset()
      if (list.length >= 2 && this.data.isTiming) { // 判断必须有两个成员 并且 当前倒计时开启状态
        this.countdownFn() // 开始倒计时
      }
    } 
  },

  //点击抽奖按钮
  onStart() {
    var e = this;
    let list = this.data.list
    let newList = []

    for (let i = 0; i < list.length; i++) {
      newList.push(0)
    }
    clearInterval(interval);
    var index = 0;
    //循环设置每一项的
    interval = setInterval(() => {

      this.playTouchMusic()

      if (index > newList.length - 1) {
        index = 0;
        newList[newList.length - 1] = 0
      } else if (index != 0) {
        newList[index - 1] = 0
      }
      newList[index] = 1
      list.forEach((item, index) => {
        item.select = newList[index]
      })
      e.setData({
        color: newList,
        list: list
      })
      index++;
    }, intime);

    //模拟网络请求时间  设为两秒
    var stoptime = 1000;
    setTimeout(function () {
      let count = e.getRandom(list.length)
      e.stop(count)  // 此处设置 停止的位置
    }, stoptime)

  },

  stop(which) {
    //清空计数器
    clearInterval(interval);
    //初始化当前位置
    var current = -1;
    var color = this.data.color;
    for (var i = 0; i < color.length; i++) {
      if (color[i] == 1) {
        current = i;
      }
    }
    //下标从1开始
    let index = current + 1;

    this.stopLuck(which, index, intime, 20);
  },


  /**
   * which: 选中位置
   * index: 当前位置
   * time: 时间标记
   * splittime：每次增加的时间 值越大减速越快
   */
  stopLuck (which, index, time, splittime) {
    //值越大出现中奖结果后减速时间越长
    let color = this.data.color;
    let list = this.data.list

    setTimeout(()=> {
      this.Music.stop()
      this.playTouchMusic()
      //重置前一个位置
      if (index > color.length - 1) {
        index = 0;
        color[color.length - 1] = 0
      } else if (index != 0) {
        color[index - 1] = 0
      }
      //当前位置为选中状态
      color[index] = 1

      list.forEach((item, index) => {
        item.select = color[index]
      })

      this.setData({
        color: color,
        list: list
      })
      //如果旋转时间过短或者当前位置不等于中奖位置则递归执行
      //直到旋转至选中位置
      if (time < 400 || index != which) {
        //越来越慢
        splittime++;
        time += splittime;
        //当前位置+1
        index++;
        this.stopLuck(which, index, time, splittime);
      } else {
        setTimeout(()=>{
          this.playSelectMusic()
          wx.vibrateLong() // 使手机发生震动
          this.setData({
            Class: '#999',
            isAgainStart: true
          })
        },500)
      }
      wx.vibrateShort() // 循环使发生较短的震动
    }, time);
  },

  onAgainStart() {
    this.onReset()
    this.setData({
      isAgainStart: false,
      isJoin: true,
      list: []
    })
  },

  onReset() { // 重值游戏初始化
    clearInterval(this.countdown)
    this.setData({
      Class: '',
      isTiming: true,
      isRemove: true,
      time: 3,
      prompt: '放好手指准备'
    })
  },

  getRandom(num) { // 随机函数 返回当前选中数字
    let index = Math.floor(Math.random() * num);
    this.setData({
      num: index
    })
    return index;
  },

  _addIndex(list) { // 过滤数组，加上选中 key 值
    list.forEach(item => {
      item.select = 0
    });
    return list
  },

  playTouchMusic() {
    this.Music.title = 'touch'
    this.Music.src = this.data.touchMusic
    this.Music.play()
  },

  playCountdownMusic() {
    this.Music.title = 'Countdown'
    this.Music.src = this.data.countdownMusic
    this.Music.play()
  },

  playSelectMusic(){
    this.Music.title = 'Select'
    this.Music.src = this.data.selectMusic
    this.Music.play()
  },
  /**
  * 用户点击右上角分享
  */
  onShareAppMessage: (e) => {
    return {
      title: '来比一比~ 看谁运气好，输了要喝酒哦!',
      imageUrl: '../../img/he.png'
    }
  }
  
})